/*
  定义一个长度为[16][16]的整型二维数组并输入或指定所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。

  再分别实现二维数组中左上角到右下角和右上角到左下角所有元素的累加和并打印
  */

package com.lagou.stage02;

import java.util.Random;

public class Sum2DArray {
    private int[][] a = new int[16][16];

    public Sum2DArray() {
    }

    public Sum2DArray(int[][] a) {
        setA(a);
        this.a = a;
    }

    public int[][] getA() {
        return a;
    }

    public void setA(int[][] a) {
        // 将传入的二维数组a的引用复制给this.a
        if (16 != a.length && 16 != a[0].length) {
            System.out.println("不是[16][16]的二维数组");
        }
        this.a = a;
    }

    // 打印二维数组
    public void show() {
        int i, j;
        for (i = 0; a.length > i; i++) {
            for (j=0; a[i].length > j; j++) {
                System.out.print(a[i][j] + " ");
            }
            System.out.println();
        }
    }

    // 用来随机生成二维数组的所有元素
    public void randomGenerate() {
        Random ra = new Random();
        int i, j;
        for (i = 0; 16 > i; i++) {
            for (j = 0; j < 16; j++) {
                a[i][j] = ra.nextInt(100);
            }
        }
        show();
    }

    // 获取每行的和
    public void getLineSum() {
        int i, j, sum;
        for (i = 0; 16 > i; i++) {
            sum = 0;
            for (j = 0; j < 16; j++) {
                sum += a[i][j];
            }
            System.out.println("第" + i +"行所有元素的和是：" + sum);
        }
    }

    // 获取每列的和
    public void getColumnSum() {
        int i, j, sum;
        for (i = 0; 16 > i; i++) {
            sum = 0;
            for (j = 0; j < 16; j++) {
                sum += a[j][i];
            }
            System.out.println("第" + i +"列所有元素的和是：" + sum);
        }
    }

    // 获取左上角到右下角的和
    // 思路：左上角到右下角的元素的索引规律是：[0][0] [1][1] [2][2] ... [n][n]
    public void getLeftToRightSum() {
        int i;
        int sum = 0;
        for (i = 0; 16 > i; i++) {
            sum += a[i][i];
        }
        System.out.println("左上角到右下角的所有元素的和是：" + sum);
    }

    // 获取右上角到左下角的和
    // 思路：右上角到左下角的元素的索引规律是：[0][15] [1][14] [2][13] ... [i][j] （其中 i+j = 15）
    public void getRightToLeftSum() {
        int i;
        int sum = 0;
        for (i = 0; 16 > i; i++) {
            sum += a[i][15-i];
        }
        System.out.println("右上角到左下角的所有元素的和是：" + sum);
    }
}
